A computer system typically involves multiple components working in cooperation to perform a task. For example, a computer system may include one or more co-operating instruction processors. These instruction processors may be supported by communication busses, cache memories, shared and dedicated memories, input/output (I/O) devices, interface hardware, and the like.
The process of designing and ensuring proper functionality of these constituent components, i.e., development process, is involved and time consuming. In addition, the demand for computer systems of increasing complexity, such as computer systems that can provide more throughput, further increase the time and resources required to design and ensure the proper functionality of components.
In order to expedite the design process, emulation tools are often used to assist in testing the functionality of a component or system being designed. During this process, one or more emulation modules are often developed to interface with and test the functionality of the components being designed. For example, a designer currently developing a memory architecture may use an emulation module to mimic the functionality of an associated instruction processor. The emulated instruction processor may be used, for example, to interact with the memory architecture being developed in a manner that conforms to that of an actual instruction processor in order to test the operation of the memory architecture. As the processor itself may also not yet be implemented, the use of an emulated instruction processor allows the development of the actual instruction processor and the memory architecture to proceed concurrently. In this manner, the development period needed to complete the overall computer system may be compressed.
A designer may develop an emulation module for a particular component by utilizing an editor or other software application to describe the functionality of the component in accordance with a hardware description language (HDL). Examples of widely-used HDLs include the Very high-speed integrated circuits Hardware Description Language (VHDL) and Verilog™, which is described in the IEEE Verilog 1364-2000 standard. These languages support syntaxes that appear similar to software programming languages, such as C++ and Java, and allow the designer to define and simulate components using high-level code by describing the structure and behavior of the components.
While the use of emulation can greatly aid in the development of the computer system, emulation modules may require extended functionality and resources to properly aid the design of computer systems of increasing complexity. For example, an emulated instruction processor may require extended functionality and resources to account for the growing complexity associated with the incorporation of multiple interfaces and data paths within instruction processors to increase data throughput.
An instruction processor executes instructions that comprise operational codes (op-codes) and associated operands. The instruction processor typically fetches these op-codes and associated operands from the memory architecture, and more particularly, an instruction cache. Some conventional instruction processors incorporate separate interfaces for fetching the op-codes and the operands. The interfaces typically comprise separate data paths between the instruction processor and the memory architecture. These separate interfaces and data paths allow the instruction processor to independently fetch the operands and the op-codes from the instruction cache. In other words, the instruction processor may independently, and perhaps simultaneously, issue requests to the cache to fetch the stored operands and op-codes. Time-saving techniques directed to the efficient and accurate development and configuration of an emulated instruction processor having separate op-code and operand interfaces and data paths may further reduce the overall time necessary to develop a computer system.